from functools import wraps
from flask import abort, flash, redirect, url_for
from flask_login import current_user

def admin_required(f):
    """
    限制只有管理员才能访问的装饰器
    用法:
    @admin_required
    def admin_only_view():
        pass
    """
    @wraps(f)
    def decorated_function(*args, **kwargs):
        # 检查用户是否登录以及是否是管理员
        if not current_user.is_authenticated:
            flash('请先登录', 'warning')
            return redirect(url_for('auth.login'))
        
        if not current_user.is_admin:
            flash('您没有权限访问此页面', 'danger')
            abort(403)  # 返回禁止访问的状态码
            
        return f(*args, **kwargs)
    return decorated_function 